GList *
gdk_x11_display_get_toplevel_windows (GdkDisplay *display)
{
- GdkWindow * root_window;
- GList *new_list = NULL;
- GList *tmp_list;
-
- root_window = gdk_x11_display_get_root_window (display);
-
- tmp_list = root_window->children;
- while (tmp_list)
- {
- GdkWindow *w = tmp_list->data;
-
- if (w->window_type != GDK_WINDOW_FOREIGN)
- new_list = g_list_prepend (new_list, w);
- tmp_list = tmp_list->next;
- }
-
- return new_list;
+ return GDK_X11_DISPLAY (display)->toplevels;
}
static void
_gdk_x11_window_set_window_scale (window, scale);
}
- g_list_free (toplevels);
-
for (i = 0; i < x11_display->monitors->len; i++)
{
GdkMonitor *monitor = GDK_MONITOR (x11_display->monitors->pdata[i]);
g_warning ("XID collision, trouble ahead");
g_hash_table_insert (display_x11->xid_ht, xid, data);
+
+ if (gdk_window_get_parent (GDK_WINDOW (data)) == NULL)
+ display_x11->toplevels = g_list_prepend (display_x11->toplevels, data);
}
void
XID xid)
{
GdkX11Display *display_x11;
+ GdkWindow *window;
g_return_if_fail (GDK_IS_DISPLAY (display));
display_x11 = GDK_X11_DISPLAY (display);
- if (display_x11->xid_ht)
- g_hash_table_remove (display_x11->xid_ht, &xid);
+ if (!display_x11->xid_ht)
+ return;
+
+ window = g_hash_table_lookup (display_x11->xid_ht, &xid);
+ if (window && gdk_window_get_parent (window) == NULL)
+ display_x11->toplevels = g_list_remove (display_x11->toplevels, window);
+
+ g_hash_table_remove (display_x11->xid_ht, &xid);
}
/**